1. 理解 Transformer Attention

从零理解 Transformer Attention:为什么 Q、K、V 能让大模型“关注”重要信息?

Transformer 是 GPT、Llama、Qwen、DeepSeek 等所有现代大模型的基础。

而 Transformer 的核心只有一个:

Attention(注意力机制)

很多教程一上来就给出公式:

Attention(Q,K,V)=softmax(QKTd)V

然后开始讲各种矩阵运算。

对于初学者来说,最大的问题往往不是公式推导,而是:

本文将从最底层的直觉开始,一步一步拆解 Transformer Attention。


1. Attention 解决了什么问题?

假设有一句话:

The animal didn't cross the street because it was too tired.

这里:

it

到底指什么?

是:

animal

还是:

street

人类会自然地查看上下文:

too tired

然后判断:

it = animal

Transformer 的核心思想就是:

当前词应该从哪些词获取信息?

这就是 Attention。


2. RNN 为什么不够好?

Transformer 出现之前,主流模型是:

处理方式类似:

我
↓
爱
↓
学习
↓
AI

必须按顺序计算:

token1 → token2 → token3 → token4

存在两个问题:

无法并行

必须一步一步处理。


长距离依赖困难

例如:

小明昨天买的那本非常有趣的机器学习书...

最后一个词可能需要依赖几十个词之前的信息。

信息在传播过程中会不断衰减。


3. Transformer 的核心思想

Transformer 的做法很直接:

每个词都可以查看整个句子。

例如:

我 爱 AI

处理:

时:

爱 ← 我
爱 ← 爱
爱 ← AI

全部一起看。

这就是:

Self-Attention

4. 一个会议室的例子

假设四个人开会:

A B C D

轮到 C 发言。

C 会想:

谁的话对我最重要?

经过判断:

A 10%
B 60%
C 20%
D 10%

于是:

Cnew=0.1A+0.6B+0.2C+0.1D

这其实就是 Attention。

本质只有一句话:

对所有信息进行加权求和。


5. 从输入到 Q、K、V

假设输入:

我 爱 AI

经过 Tokenizer:

[101,205,666]

经过 Embedding:

X=[x1 x2 x3]

其中:

例如:

XR3×4096

6. Q、K、V 是怎么来的?

Transformer 内部有三个线性层:

q_proj = nn.Linear(4096,4096)
k_proj = nn.Linear(4096,4096)
v_proj = nn.Linear(4096,4096)

对应:

WQWKWV

计算:

Q=XWQK=XWKV=XWV

7. WQ、WK、WV 到底是什么?

很多人第一次学都会问:

WQ、WK、WV 是谁设计的?

答案:

它们就是普通神经网络权重。

和 MLP 里的权重没有区别。

例如:

nn.Linear(4096,4096)

里面就有一个矩阵:

W

随机初始化后,通过梯度下降不断更新。

Attention 里的:

WQWKWV

也是一样。


8. 为什么要三个矩阵?

这是 Transformer 作者的设计选择。

因为一个 Token 有三种不同角色。


Query

表示:

我想找什么

Key

表示:

我有什么特征

Value

表示:

我真正携带的信息

可以理解成搜索引擎:

用户输入:

机器学习

对应:

Query

网页标题:

机器学习教程

对应:

Key

网页正文:

这里介绍神经网络...

对应:

Value

匹配:

Query ↔ Key

决定看谁。


然后:

Value

决定拿什么内容。


9. 为什么不用一个矩阵?

例如:

Q=K=V=X

完全合法。

实际上很多论文都尝试过。

但是效果通常下降。

原因是:

Attention 干了两件事:

第一件事

计算相关性:

QKT

即:

找谁重要

第二件事

信息传递:

AV

即:

拿什么信息

这是两种不同任务。

所以拆成不同参数学习效果更好。


10. 为什么是 QKᵀ?

Attention 最关键的一步:

QKT

很多人会问:

为什么非要乘转置?


假设:

Q=[q1 q2 q3]K=[k1 k2 k3]

希望计算:

qikj

对于所有:

i,j

矩阵乘法:

QKT

刚好得到:

[q1k1q1k2q1k3q2k1q2k2q2k3q3k1q3k2q3k3]

这正是:

每个 Query 与每个 Key 的相似度矩阵。


11. 点积为什么能表示相似度?

因为:

ab=|a||b|cosθ

如果单位化:

ab=cosθ

例如:

(1,0)(1,0)=1

完全相同。


(1,0)(0,1)=0

完全无关。


所以:

qikj

可以作为:

相关性评分

12. 为什么除以 √d?

Attention 使用:

QKTd

原因是:

随着维度增加:

qk

会越来越大。

例如:

64维 → 数十
4096维 → 数千

如果直接进入 Softmax:

[3000,2800,2500]

会变成:

[1,0,0]

梯度几乎消失。


因此使用:

d

进行缩放。

保持数值稳定。


13. Softmax 在干什么?

假设:

QKT=[2,8,5]

Softmax 后:

[0.002,0.95,0.048]

得到:

αi0

并且:

iαi=1

变成:

注意力权重

例如:

法国   80%
首都   15%
巴黎   5%

14. 为什么最后要乘 V?

这是 Attention 的精髓。


很多人误以为:

QKᵀ

已经完成任务了。

其实没有。


QKᵀ 只是决定:

该看谁

真正的信息在:

V

里面。


例如:

我 爱 AI

对应:

V1 = 我的信息
V2 = 爱的信息
V3 = AI的信息

Attention 算出:

[0.1,0.2,0.7]

说明:

主要关注 AI

于是:

O=0.1V1+0.2V2+0.7V3

得到新的表示。


因此:

Q、K 决定信息流向,V 决定真正传递的信息。


15. 从信息路由角度理解 Attention

Attention 实际上分成两部分。


路由阶段

A=softmax(QKTd)

决定:

谁看谁

信息传递阶段

O=AV

决定:

传什么

因此:

QKᵀ = 路由器
V = 数据包
AV = 信息传输

16. 从图论角度理解

Attention 还可以看成一张动态图。

假设:

我 爱 AI

对应三个节点:

节点1
节点2
节点3

Attention 生成:

A=[a11a12a13a21a22a23a31a32a33]

其中:

aij

表示:

节点i
→
节点j

的连接强度。


因此很多论文会说:

Attention 本质上是在动态构建一张 Token 关系图。


17. Attention 的完整流程

Pasted image 20260625132438.png


18. Attention 的本质

如果只记住一句话:

Attention 的本质是:让每个 Token 根据当前上下文,动态决定应该从哪些 Token 获取信息,并按照相关性对这些信息进行加权融合。

数学表达:

Attention(Q,K,V)=softmax(QKTd)V

工程视角:

Q:我要找什么

K:我能提供什么

V:我真正携带的信息

信息流动过程:

QKᵀ
→ 计算相关性

Softmax
→ 变成注意力权重

AV
→ 聚合信息

这就是 Transformer Attention 的全部核心思想,也是现代大语言模型最重要的基础组件。